-- 呼吸栏
-- boss刷新倒计时
-- buff刷新倒计时
-- 玩家存档备忘录
-- 暴动倒计时
-- 植物人开花仪
-- 降雨降雪预测
local p_util = require "libs/playerutil"
local b_util = require "data/bossutil"
local e_util = require "libs/entutil"
local _G = GLOBAL

local function PushTimer(type, data)
    if _G.TheWorld then
        _G.TheWorld:PushEvent("Mod_ShroomCake_Timer", {
            type = type,
            data = data,
        })
    end
end


AddPlayerActivatedFunc(function(player, world)
    player:ListenForEvent("oneat_withhx", function(_, food)
        PushTimer("EatFood", food.prefab)
    end)
    local hud = player.HUD and player.HUD.controls
    if hud then
        hud.huxi_board = hud:AddChild(require("new_widgets/huxi_timer")())
    end
end)


-- BOSS
-- local time_tick = _G.TheSim:GetTickTime()
-- for b_name, b_data in pairs(b_util:LoadPrefabData())do
--     AddPrefabPostInit(b_name, function(boss)
--         -- Tag验证
--         if b_data.world_tag and not _G.TheWorld:HasTag(b_data.world_tag) then
--             return
--         end
--         -- 延迟确保实体可用
--         boss:DoTaskInTime(0.5, function(inst)
--             print(inst.name.."出现")
--             -- 保证是自然存在的实体
--             if not b_data.func_appear or b_data.func_appear(inst) then
--                 print(inst.name.."注册")
--                 PushTimer("BossAppear", b_name)

--                 local j = type(b_data.judge)
--                 local function deadToDo(ent)
--                     if not b_data.func_death or b_data.func_death(ent) then
                        
--                         print(ent.name.."死亡")
--                         PushTimer("BossDeath", b_name)
--                     end
--                 end
--                 -- 死亡是生命的终点
--                 if j == "function" then
--                     e_util:SetBindEvent(inst,"onremove", function(inst)
--                         print(inst.name.."移除")
--                         if b_data.judge(inst) then
--                             deadToDo(inst)
--                         end
--                     end)
--                 elseif j == "table" then
--                     local _lock         -- 一个锁可以限制循环只执行一次(或许用taskcancel的方式更好，但写法太麻烦)
--                     inst:DoPeriodicTask(time_tick, function(inst)
--                         if e_util:IsAnim(b_data.judge, inst) and not _lock then
--                             deadToDo(inst)
--                             _lock = true
--                             print(inst.name.."移除")
--                         end
--                     end)
--                 end
--             end
--         end)

--         -- 其实这里还能写监听拓展，但是又有什么必要呢
--     end)
-- end